function onloadJS() {
    
     /*
    *автоподгрузчик городов
    **/
    $("#city").autocomplete(W_AJAX + "city/getCity.php", {
        delay:10,
        minChars:1,
        matchSubset:1,
        autoFill:true,
        matchContains:1,
        cacheLength:10,
        selectFirst:true,
        maxItemsToShow:10
    });  
 
     isLoggedIn = document.getElementById("isLoggedIn").value; //глобальная перменная показывающая залогинен ли пользователь
    
    
    /**
     *массив, хранящий значение введенных данных о фирме
     */
    buildInfo = {};
    buildInfo.latExact = '';
    buildInfo.lngExact = '';
    buildInfo.lat = '';
    buildInfo.lng = '';
    buildInfo.city = '';
    buildInfo.addressFull = '';
    buildInfo.name = '';
    buildInfo.telephone = '';
    buildInfo.site = '';
    buildInfo.typeInn = '';
    buildInfo.class_ = '';
    buildInfo.year = '';
    buildInfo.numberFloors = '';
    buildInfo.square = '';
    buildInfo.address = '';

    /*
     *проверяем, работает ли гугл
     **/
    googleIsLoaded = false; //переменная, которая показывает работает ли гугл
    
    if (typeof google != 'undefined'){  
        geocoder = new google.maps.Geocoder();
        googleIsLoaded = true;
    }//объект, занимающийся геокодированием
    else{
        alert('Гугля не работает, поэтому страничка с ограниченной функциональностью');     
    }
 
 
}

/*
 *JS функция аналогичная PHP trim
 *@param string s - входная строка
 *@return string - выходная отформотированная строка
 **/
function TrimStr(s) {
  if (typeof s != "undefined"){
    s = s.replace( /^\s+/g, '');
    return s.replace( /\s+$/g, '');
  }
  else{
      return '';
  }
}


function inputAddressFocus(){
   
   var country = document.getElementById('address').value; 
   
   if (country == 'введите адрес')
       document.getElementById('address').value = ''; 
}

/*
 *При пустом значении в инпуте  города, это пустое значение меняется на надпись "введите город"
 *@return void;
 **/
function inputAddressBlur(){
   
   var country = document.getElementById('address').value; 
   
   if (country == '')
       document.getElementById('address').value = 'введите адрес';
}

/*
 *показывает введенный адрес на карте
 *@return none;
 **/
function showAddressOnMap(){
   
    /*
     *получаем данные о городе, стране и адресе из введенных форм на страничке 
     */
    var address = document.getElementById('address').value; //адрес
    var cityCountry = document.getElementById('city').value; // формат :город(страна). Пр-р: "Москва(Россия)"
    
    /*
     *проверка введены адреса
     **/
     
    var flagNoneErrors = true;
    
    if (address == '' || address == 'введите адрес' && flagNoneErrors){
        alert('вы не ввели адрес');
        flagNoneErrors = false;
    }
    
    if (cityCountry == '' || cityCountry == 'введите город' && flagNoneErrors){
        alert('вы не выбрали город');
        flagNoneErrors = false;
    }
    
    /*
    *парсим город(страна) на отдельные составляющие : город и страна
    **/
    cityName = null;
    countryName = null;
    var myRe = /(^[ 0-9А-Яа-я_-]+)(\(([ 0-9А-Яа-я_-]+)\))?/g;//регулярка для вытаскивания имен города и страны
    if ((myArray = myRe.exec(cityCountry)) != null) {
        cityName = myArray[1];
        cityName = TrimStr(cityName);
        buildInfo.city = cityName;
        countryName = myArray[3];
        countryName = TrimStr(countryName);
    }
    
    /*
    *в случае, если пользователем было некорректно введено значение в поле "город", то выводим соответсвующую ошибку и дальше не продолжаем выполнение скрипта
    **/
    if (cityName == null || countryName == null && flagNoneErrors){
        alert('Город введен некорректно');
        flagNoneErrors = false;
    }

    /*
     *если ошибок не было, то продолжаем
     **/
    if (flagNoneErrors){

        $('#frameMap').show(); //делаем видимым окно отображения карты

        /*
        *получаем полный адрес путем добавления к введенном адресу имена полученных страны и города
        **/
        var fullAddress = countryName + ', ' + cityName + ', ' + address;

        buildInfo.addressFull = fullAddress;
        //инициализация карт с центом в городе Санкт-Петербург(в будущем центр должен будет показываться с учетом GeoIP БД)
        var myOptions = {
            center: new google.maps.LatLng(60.0, 30.19),
            zoom: 10,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };

        var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

        geocoder.geocode({'address': fullAddress}, function(results, status) {

            if (status == google.maps.GeocoderStatus.OK) { // если геокодирование прошло нормально, то...

                var latLng = results[0].geometry.location; //получаем объект LatLng, содержащий нужные данные(см. документация google maps api v.3)

                /*
                 *записываем координаты в инфо массив фирмы
                 **/
                buildInfo.lat = latLng.lat();
                buildInfo.lng = latLng.lng();

                    map.setCenter(latLng); //увеливаем карту до маштаба 15
                    map.setZoom(13);

                    var marker = new google.maps.Marker({ //добавляем новый маркер с координатами щелчка
                        position: latLng, //координаты маркера/щелчка
                        map: map //добавляем маркер на уже созданую карту
                    }); 
            }
        })//конец геокодера
    }//конец if (flagNoneErrors)
}

/*
 *функция для выборки адреса на карте
 *@return none;
 **/
function chooseAddressOnMap(){
     $('#frameMap').show(); //делаем видимым окно отображения карты 
    clickOnMap = true;
    
        //инициализация карт с центом в городе Санкт-Петербург(в будущем центр должен будет показываться с учетом GeoIP БД)
        var myOptions = {
            center: new google.maps.LatLng(60.0, 30.19),
            zoom: 10,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

        /*
         *добавляем обработчик событий по клику на карте
         **/
        google.maps.event.addListener(map, 'click', function(event){
            if(clickOnMap){
            latLng = event.latLng; //координаты клика по карте
            
            map.setCenter(latLng);
            map.setZoom(15);
            
            /*если маркер еще не был определен, то создаем новый. если был ранее создан, то меняем его местоположение на новогое
             */
            if (typeof marker == 'undefined') {
                marker = new google.maps.Marker({ //добавляем новый маркер с координатами щелчка
                position: latLng, //координаты маркера/щелчка
		map: map //добавляем маркер на уже созданую карту
            });
            }
            else {
                marker.setMap(map);
                marker.setPosition(latLng)
            }
            
          /*
           *запускаем геокодер для определения текстового значения адреса
           **/
            
            geocoder.geocode({'location': latLng}, function(results, status) {
                
                googleAnswer = results;
                //здесь и далее реализован небольшой "костыль" из-за некоторых проблем, возникавших при закрытии/открытии инфо-окошек.
                /*
                *если глобальный объект инфо-окошка сущесвует, то вызываем метод его закрытия(даже если окошко закрыто). если нет, то создаем новый
                **/
                if (typeof infoWindow == 'undefined') {
                    infoWindow = new google.maps.InfoWindow(); 
                }
                else {
                    infoWindow.close();
                }


                if (status == google.maps.GeocoderStatus.OK) { // если геокодирование прошло нормально, то...
                    //текст инфо-окна, которое появится над маркером
                    var text = "<div id=\"InfoWindow\">";
                    var text = text + results[0].formatted_address;
                    var text = text + "<BR>Сохранить данный адрес и положение фирмы?<BR><input type=\"button\" name=\"YesEvent\" id=\"YesEvent\" value=\"Да\" OnClick=\"savePlace()\"/>";
                    var text = text + "<input type=\"button\" name=\"NoEvent\" id=\"NoEvent\" value=\"Нет\"  OnClick=\"infoWindowClose()\"/></div>"; //очищение карты
                    infoWindow.setContent(text);//устанавливаем текс для инфо-окна
                    infoWindow.open(map, marker); //прикрепляем инфо-окно к только что 
                }
            })
                        }
            else{
                clickOnMap = true;
             }
        })
}

function savePlace(){
    infoWindow.close();
    $('#frameMap').hide();
    clickOnMap = false;
    buildInfo.addressFull = googleAnswer[0].formatted_address;
    buildInfo.latExact = latLng.lat();
    buildInfo.lngExact = latLng.lng();
    var types = googleAnswer[0].types[0];
    
    if (types == 'street_address'){
        buildInfo.city = googleAnswer[0].address_components[3].long_name;
        var toPageCity = googleAnswer[0].address_components[3].long_name + ' (' + googleAnswer[0].address_components[4].long_name + ')';
        document.getElementById('city').value = toPageCity;
        
        var toPageAddress = googleAnswer[0].address_components[2].long_name + ', ' + googleAnswer[0].address_components[1].long_name + ', ' + googleAnswer[0].address_components[0].long_name;
        document.getElementById('address').value = toPageAddress;
    }
}             

function infoWindowClose(){
    clickOnMap = false;
    infoWindow.close();
}

/*
 *функция, закрывающая область с картой
 *@return none
 **/
function closeMap(){ 
    $('#frameMap').hide();
}

function regBuilding(){
  
    buildInfo.name = document.getElementById('name_bc').value; 
    
    buildInfo.telephone = document.getElementById('tel_bc').value;

    buildInfo.site = document.getElementById('site_bc').value;
   
    buildInfo.typeInn = document.getElementById('typeInn').value;
    
    buildInfo.class_ = document.getElementById('cl_bc').value;
    
    buildInfo.year = document.getElementById('gp_bc').value;
    
    buildInfo.numberFloors = document.getElementById('fl_bc').value;
    
    buildInfo.square = document.getElementById('plo_bc').value;
    
    buildInfo.numStuff = document.getElementById('numStuff').value;
    
    buildInfo.address = document.getElementById('address').value;
         
        if (buildInfo.lat == '' && buildInfo.lng == '' && buildInfo.latExact == '' && buildInfo.lngExact == ''){
         
        /*
        *получаем данные о городе, стране и адресе из введенных форм на страничке 
        */
        var address = document.getElementById('address').value; //адрес
        var cityCountry = document.getElementById('city').value; // формат :город(страна). Пр-р: "Москва(Россия)"

        /*
        *парсим город(страна) на отдельные составляющие : город и страна
        **/
        cityName = '';
        countryName = '';
        var myRe = /(^[ 0-9А-Яа-я_-]+)(\(([ 0-9А-Яа-я_-]+)\))?/g;//регулярка для вытаскивания имен города и страны
        if ((myArray = myRe.exec(cityCountry)) != null) {
            cityName = myArray[1];
            cityName = TrimStr(cityName);
            buildInfo.city = cityName;
            countryName = myArray[3];
            countryName = TrimStr(countryName);
        }

        /*
        *в случае, если пользователем было некорректно введено значение в поле "город", то выводим соответсвующую ошибку и дальше не продолжаем выполнение скрипта
        **/
        if((cityName == "") || (countryName == "")){
            alert('Город введен некорректно');      
        }
        else{
            /*
            *получаем полный адрес путем добавления к введенном адресу имена полученных страны и города
            **/
            var fullAddress = countryName + ', ' + cityName + ', ' + address;
            buildInfo.addressFull = fullAddress;

            geocoder.geocode({'address': fullAddress}, function(results, status) {
            if (status == google.maps.GeocoderStatus.OK) { // если геокодирование прошло нормально, то...
                    var latLng = results[0].geometry.location; //получаем объект LatLng, содержащий нужные данные(см. документация google maps api v.3)
                    buildInfo.lat = latLng.lat();
                    buildInfo.lng = latLng.lng();
                    regBuildPart1();  
            }
            else{
                alert("Введенный адрес не существует. Введите другой");
            }
            })
        }   
     }
     else{
        regBuildPart1(); 
     }
}

/*
 *продолжение функции regFirmPart после ajax-запроса геокодера
 *return none
 **/
function regBuildPart1(){
    
    var flagNoneErrors = true;
            
     if ((buildInfo.address == '0' || buildInfo.address == '') && flagNoneErrors){
         alert("Вы не ввели адрес");     
         flagNoneErrors = false;
     }
     
     if ((buildInfo.city == '0' || buildInfo.city == '') && flagNoneErrors){
         alert("Вы не указали город");   
         flagNoneErrors = false;
     }
     
     if ((buildInfo.class_ == '' || buildInfo.class_ == '0') && flagNoneErrors){
         alert("Вы не указали класс"); 
         flagNoneErrors = false;
     }
     
     if ((buildInfo.name == '0' || buildInfo.name == '') && flagNoneErrors){
         alert("Вы не указала имя фирмы");
         flagNoneErrors = false;
     }
     
     if ((buildInfo.numStuff == '0' || buildInfo.numStuff == '') && flagNoneErrors){
         alert("Вы не указала количество обслуживающего персонала");
         flagNoneErrors = false;
     }
     
     if ((buildInfo.numberFloors == '0' || buildInfo.numberFloors == '') && flagNoneErrors){
         alert("Вы не указала количество этажей в здании");
         flagNoneErrors = false;
     }
     
     if ((buildInfo.site == '0' || buildInfo.site == '') && flagNoneErrors){
         alert("Вы не указала сайт здания");
         flagNoneErrors = false;
     }
     
     if ((buildInfo.square == '0' || buildInfo.square == '') && flagNoneErrors){
         alert("Вы не указали площадь здания");
         flagNoneErrors = false;
     }
     
     if ((buildInfo.telephone == '0' || buildInfo.telephone == '') && flagNoneErrors){
         alert("Вы не указали номер телефона");
         flagNoneErrors = false;
     }
     
     if ((buildInfo.typeInn == '0' || buildInfo.typeInn == '') && flagNoneErrors){
         alert("Вы не выбрали тип здания");
         flagNoneErrors = false;
     }

     if ((buildInfo.year == '0' || buildInfo.year == '') && flagNoneErrors){
         alert("Вы не указали год постройки здания");
         flagNoneErrors = false;
     }
     
     
     //если нет ошибок, то отправляем данные для регистрации
if (flagNoneErrors){
        var  dataSend={
            query: 'regBuilding',
            info : buildInfo
        }

        $.post(
            W_AJAX + "controllers/controllerCompany.php",
            {
                dataSend : dataSend
            },
            function(data){
                if (data.status == "true"){
                    alert ('Здание зарегистрировано');
                    window.location = 'pages/addOffice_.php';
                }
                else
                    alert(data.error);
            },
            'json'
        );
    }
}
